/-app
/-boot
/-docs
/-features
/-imports
/-koBindings
/-storage ...
/-storage/attached ...
/-storage/attached/api
/-storage/attached/indexedDB
/-storage/attached/localStorage
/-storage/attached/webSQL ...
DetectStorage.ts
LoadStorage.ts
UpdateStorage.ts
functions.ts
/-tests
/-tests/storage
/-tests/storage/attached
AttachedStorageTests.ts
IndexedDBStorageTests.ts
LocalStorageStorageTests.ts
WebSQLStorageTests.ts
_sampleTests.ts
/-typings
base.css
readme.md
stringUtils.ts
teapo.html
    if (sqlText.indexOf('\u00FF') < 0 && sqlText.indexOf('\u0000') < 0) return sqlText;
1
module teapo.storage.attached.webSQL {
2
 
3
  export function mangleDatabaseObjectName(name: string): string {
4
    return '='+btoa(name);
5
  }
6
 
7
  export function unmangleDatabaseObjectName(name: string): string {
8
    if (!name || name.charAt(0) !== '=') return null;
9
 
10
    try {
11
      return atob(name.slice(1));
12
    }
13
    catch (error) {
14
      return null;
15
    }
16
  }
17
 
18
  export function wrapSQLError(sqlError: SQLError, context: string): Error {
19
    if (!sqlError) return null;
20
    return new Error(context+' '+sqlError.message + ' [' + sqlError.code + ']');
21
  }
22
 
23
  export function listAllTables(
24
    transaction: SQLTransaction,
25
    callback: (tables: string[]) => void,
26
    errorCallback: (sqlError: SQLError)=>void) {
27
    transaction.executeSql(
28
      'SELECT tbl_name  from sqlite_master WHERE type=\'table\'',
29
      [],
30
      (transaction, result) => {
31
        var tables: string[] = [];
32
        for (var i = 0; i < result.rows.length; i++) {
33
          var row = result.rows.item(i);
34
          var table = row.tbl_name;
35
          if(!table || (table[0] !== '*' && table.charAt(0) !== '=')) continue;
36
          tables.push(row.tbl_name);
37
        }
38
        callback(tables);
39
      },
40
      (transaction, sqlError) => errorCallback(sqlError));
41
  }
42
 
43
   export function updateEdited(
44
     editedUTC: number,
45
     transaction: SQLTransaction,
46
     callback: (sqlError: SQLError) => void ) {
47
 
48
    transaction.executeSql(
49
      'INSERT OR REPLACE INTO "*metadata" VALUES(\'edited\',?)',
50
      [editedUTC.toString()],
51
      (transaction, result) => callback(null),
52
      (transaction, sqlError) => callback(sqlError));
53
 
54
  }
55
 
56
  export function toSqlText(text: string) {
57
    if (text.indexOf('\u00FF') < 0 && text.indexOf('\u0000') < 0) return text;
58
 
59
    return text.replace(/\u00FF/g, '\u00FFf').replace(/\u0000/g, '\u00FF0');
60
  }
61
 
62
  export function fromSqlText(sqlText: string) { 
63
    if (sqlText.indexOf('\u00FF') < 0 && sqlText.indexOf('\u0000') < 0) return sqlText;
64
 
65
    return sqlText.replace(/\u00FFf/g, '\u00FF').replace(/\u00FF0/g, '\u0000');
66
  }
67
 
68
  
69
}